11490. Простые
на интервале 2
Заданы два натуральных числа a и c. Найдите такое наименьшее
натуральное число b, что количество простых чисел на промежутке [a;
b] включительно равно c.
Вход. Два натуральных числа a и c (a,
c ≤ 106).
Выход. Выведите искомое наименьшее
значение b.
Пример
входа |
Пример
выхода |
3 4 |
11 |
простые
числа
Перебираем числа
a, a + 1, a +
2, … . Подсчитываем среди них простые. Как только встретится c простых чисел,
останавливаемся. Таким образом найдем наименьшее b, для которого на промежутке [a; b]
имеется в точности c простых чисел.
Пример
На интервале [3; 11] имеется 4
простых числа: 3, 5, 7 и 11.
Реализация алгоритма
Функция IsPrime проверяет, является
ли число n простым. Число 1 не является простым.
int IsPrime(int n)
{
if (n <=
1) return 0;
for (int i = 2;
i <= sqrt(n); i++)
if (n % i ==
0) return 0;
return 1;
}
Основная часть программы. Читаем входные данные.
scanf("%d %d", &a, &c);
Начинаем движение переменной b от a по возрастанию
значений: a, a + 1, a +
2, … . В переменной cnt подсчитываем количество пройденных простых чисел.
Как только оно станет равным c, выходим из цикла.
cnt = 0;
for (b = a; ; b++)
{
if (IsPrime(b)) cnt++;
if (cnt == c) break;
}
Выводим ответ.
printf("%d\n", b);